// 定义泛型约束：控制泛型中应该 有哪些属性
interface Computer {
    usb:number,
    categories:string,
    price?:number
}
// 使用 extends 将该约束 应用到泛型 上
function Apple<T extends Computer>(instance:T):string{
    return `创建一个${instance.categories}苹果电脑实例，${instance.price?`价格为:${instance.price}元`:"无报价"},带有${instance.usb}个usb接口的属性`
}

const Air = {
    usb:4,
    categories:"Air"
}
const myAir = Apple(Air)
console.log(myAir) // 创建一个Air苹果电脑实例，无报价,带有4个usb接口的属性

const Pro = {
    usb:5,
    categories:"Pro",
    price:12999
}
const myPro = Apple(Pro)
console.log(myPro) // 创建一个Pro苹果电脑实例，价格为:12999元,带有5个usb接口的属性